home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / EC_Mp3_stu2092771242007.psc / EC MP3 Mixer / CLASSES / AttachedPicDecoder.cls next >
Text File  |  2007-11-25  |  5KB  |  150 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "APicDecoder"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Public Enum PictureType
  17.     OtherPicType
  18.     FileIcon32x32
  19.     OtherFileIcon
  20.     FrontCover
  21.     BackCover
  22.     LeafletPage
  23.     Media
  24.     LeadArtist
  25.     Artist
  26.     Conductor
  27.     Band
  28.     Composer
  29.     Lyricist
  30.     RecordingLocation
  31.     DuringRecording
  32.     DuringPerformance
  33.     VideoScreenCapture
  34.     BrightColoredFish
  35.     Illustration
  36.     BandLogotype
  37.     PublisherLogotype
  38. End Enum
  39.  
  40. Public Function DecodeImage(ByVal MFDClass As MultiFrameData, ByVal Index As Long, MIMEType As String, PictureType As PictureType, Pic As StdPicture, ByVal ID3Revision As Byte, Optional OrigPicData As String) As Boolean
  41.     On Error GoTo err
  42.     Dim bRet As Boolean
  43.     Dim sMIMEType As String
  44.     Dim tMIMEType As String
  45.     Dim lPicType As PictureType
  46.     Dim GPC As GDIPlusCandy
  47.     Dim sPic As StdPicture
  48.     Dim sValue As String
  49.     Dim i As Long
  50.     
  51.     bRet = False
  52.     MIMEType = ""
  53.     PictureType = OtherPicType
  54.     Set Pic = Nothing
  55.     OrigPicData = ""
  56.     
  57.     sValue = MFDClass(Index)
  58.     If ID3Revision > 2 Then i = InStr(sValue, Chr$(0)) Else i = 4
  59.     If i > 0 Then
  60.         sMIMEType = Left$(sValue, i - 1)
  61.         If sMIMEType = "-->" Then GoTo err ' Skip image URLs
  62.         sValue = Mid$(sValue, i + 1 * Abs(ID3Revision > 2))
  63.         lPicType = Asc(Left$(sValue, 1))
  64.         If lPicType > PublisherLogotype Then lPicType = OtherPicType  ' Fix invalid picture type
  65.         sValue = Mid$(sValue, 2)
  66.         If Left$(sValue, 1) = Chr$(0) Then ' Skip frames with descriptions
  67.             sValue = Mid$(sValue, 2)
  68.             Set GPC = New GDIPlusCandy
  69.             Set sPic = GPC.DataToImage(sValue)
  70.             Set GPC = Nothing
  71.             If sPic Is Nothing Then
  72.                 GoTo err
  73.             Else
  74.                 tMIMEType = DetermineImageType(sValue, ID3Revision)
  75.                 If sMIMEType <> tMIMEType And tMIMEType <> ImageUnsupported Then
  76.                     sMIMEType = tMIMEType
  77.                 End If
  78.                 MIMEType = sMIMEType
  79.                 If lPicType = FileIcon32x32 Then
  80.                     If sMIMEType <> ImagePNG Or HimetricToPixelsX(sPic.Width) <> 32 Or HimetricToPixelsY(sPic.Height) <> 32 Then
  81.                         lPicType = OtherFileIcon
  82.                     End If
  83.                 End If
  84.                 PictureType = lPicType
  85.                 Set Pic = sPic
  86.                 OrigPicData = sValue
  87.                 bRet = True
  88.             End If
  89.         End If
  90.     End If
  91. err:
  92.     DecodeImage = bRet
  93. End Function
  94.  
  95. ' Insert data WITHOUT encoding
  96. Public Sub InsertImageData(MFDClass As MultiFrameData, ByVal Index As Long, ByVal MIMEType As String, ByVal PictureType As PictureType, ByVal Data As String, ByVal ID3Revision As Byte)
  97.     On Error GoTo err
  98.     
  99.     Dim lPicType As PictureType: lPicType = PictureType
  100.     Dim sMIMEType As String
  101.     Dim tMIMEType As String
  102.     Dim GPC As GDIPlusCandy
  103.     Dim sPic As StdPicture
  104.     
  105.     sMIMEType = MIMEType
  106.     tMIMEType = DetermineImageType(Data, ID3Revision)
  107.     If sMIMEType <> tMIMEType And tMIMEType <> ImageUnsupported Then
  108.         sMIMEType = tMIMEType
  109.     End If
  110.     
  111.     Set GPC = New GDIPlusCandy
  112.     Set sPic = GPC.DataToImage(Data)
  113.     Set GPC = Nothing
  114.     
  115.     If Not sPic Is Nothing Then  ' Do not insert the data if invalid
  116.         If lPicType = FileIcon32x32 Then
  117.             If MIME(sMIMEType, ID3Revision) <> ImagePNG Or HimetricToPixelsX(sPic.Width) <> 32 Or HimetricToPixelsY(sPic.Height) <> 32 Then
  118.                 lPicType = OtherFileIcon
  119.             End If
  120.         End If
  121.         MFDClass(Index) = sMIMEType & IIf(ID3Revision > 2, Chr$(0), "") & Chr$(lPicType) & Chr$(0) & Data
  122.     End If
  123. err:
  124. End Sub
  125.  
  126. ' Insert data WITH encoding
  127. Public Sub InsertImage(MFDClass As MultiFrameData, ByVal Index As Long, ByVal MIMEType As String, ByVal PictureType As PictureType, ByVal Pic As StdPicture, ByVal ID3Revision As Byte)
  128.     On Error GoTo err
  129.     
  130.     Dim lPicType As PictureType: lPicType = PictureType
  131.     Dim sMIMEType As String
  132.     Dim tMIMEType As String
  133.     Dim GPC As GDIPlusCandy
  134.     Dim sData As String
  135.     
  136.     Set GPC = New GDIPlusCandy
  137.     sData = GPC.ImageToData(Pic, MIME(MIMEType, ID3Revision))
  138.     Set GPC = Nothing
  139.     
  140.     If sData <> "" Then  ' Do not insert the data if invalid
  141.         If lPicType = FileIcon32x32 Then
  142.             If MIME(MIMEType, ID3Revision) <> ImagePNG Or HimetricToPixelsX(Pic.Width) <> 32 Or HimetricToPixelsY(Pic.Height) <> 32 Then
  143.                 lPicType = OtherFileIcon
  144.             End If
  145.         End If
  146.         MFDClass(Index) = MIMEType & IIf(ID3Revision > 2, Chr$(0), "") & Chr$(lPicType) & Chr$(0) & sData
  147.     End If
  148. err:
  149. End Sub
  150.